package com.alibaba.bink;

import java.util.Stack;


/**
 * @author galeno
 * @Title:
 * @Description:
 * @date 2021/10/2818:05
 */
public class UnzipString {

    public static void main(String[] args) {
        String str = "A1000000";
        long l = System.currentTimeMillis();
        System.out.print(unZipString(str));
        System.out.println(System.currentTimeMillis()-l);
    }

    private static String unZipString(String str) {
        Stack<String> strStack = new Stack<String>();

        for(int i=0;i<str.length();i++) {
            if(str.charAt(i)>='A' && str.charAt(i)<='Z') {//若是字符,直接入栈
                strStack.push(String.valueOf(str.charAt(i)));
            }else if(str.charAt(i)>='0' && str.charAt(i)<='9') {//若是数字,则将栈顶字符串弹出将计算,再入栈
                String numStr="";
                while(i<str.length() && str.charAt(i)>='0' && str.charAt(i)<='9') {//计算数字
                    numStr += str.charAt(i);
                    i++;
                }
                i--;
                int num=Integer.valueOf(numStr);
                String tmpStr=strStack.pop();
                String resStr="";
                for(int j=0;j<num;j++) {
                    resStr = resStr+tmpStr;
                }
                strStack.push(resStr);
            }else if(str.charAt(i)=='(') {//若是左括号,则直接入栈
                strStack.push(String.valueOf(str.charAt(i)));
            }else if(str.charAt(i)==')') {
                String tmpStr=strStack.pop();
                String resStr="";
                while(!tmpStr.equals("(")) {
                    resStr = tmpStr+resStr;
                    tmpStr=strStack.pop();
                }
                strStack.push(resStr);
            }
        }

        String tmpStr=strStack.pop();
        if(!strStack.empty()) {
            String resStr = tmpStr;
            while (!strStack.empty()) {
                tmpStr = strStack.pop();
                resStr = tmpStr + resStr;
            }
            return resStr;
        }
        return tmpStr;
    }
}
